﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.HSSF.Util;
using NPOI.POIFS.FileSystem;
using NPOI.HPSF;
using System.IO;


namespace PHI2
{
    class ManejoEXCEL
    {
        private Stream myStream=null;
        public Stream MyStream 
        { 
            get{return myStream;}
            set { myStream=value;} 
        }
        private ConsultasBD consultas;

        public ManejoEXCEL(ConsultasBD consultas)
        {
            this.consultas = consultas;
        }

        /// <summary>
        /// Método que lee el archivo excel y solicita que se vayan registrando las mediciones
        /// </summary>
        /// <returns></returns>
        public string ProcesarMediciones()
        {
            IWorkbook workBook = new HSSFWorkbook(this.myStream);
            ISheet workSheet = workBook.GetSheetAt(0);

            int actualizaciones = 0;
            int inserciones = 0;

            string mensajeAdicional = "";

            for (int row = 11; row < workSheet.LastRowNum; row++)
            {
                if (!String.IsNullOrEmpty(workSheet.GetRow(row).GetCell(0).ToString()))
                {
                    int codigoVariedad = Convert.ToInt32(workSheet.GetRow(row).GetCell(0).NumericCellValue);
                    int parcela = Convert.ToInt32(workSheet.GetRow(row).GetCell(1).NumericCellValue);
                    int ensayo = Convert.ToInt32(workSheet.GetRow(row).GetCell(2).NumericCellValue);
                    int repeticion = Convert.ToInt32(workSheet.GetRow(row).GetCell(3).NumericCellValue);
                    DateTime fechaSiembra = workSheet.GetRow(row).GetCell(4).DateCellValue;
                    DateTime fechaEmergencia = workSheet.GetRow(row).GetCell(5).DateCellValue;
                    DateTime fechaEspigadura = workSheet.GetRow(row).GetCell(6).DateCellValue;
                    DateTime fechaFloracion = workSheet.GetRow(row).GetCell(7).DateCellValue;
                    DateTime fechaMadurez = workSheet.GetRow(row).GetCell(8).DateCellValue;
                    float FS = Convert.ToSingle(workSheet.GetRow(row).GetCell(9).NumericCellValue);
                    float DS = Convert.ToSingle(workSheet.GetRow(row).GetCell(10).NumericCellValue);
                    float Bolsa = Convert.ToSingle(workSheet.GetRow(row).GetCell(11).NumericCellValue);
                    float FB = Convert.ToSingle(workSheet.GetRow(row).GetCell(12).NumericCellValue);
                    float TG = Convert.ToSingle(workSheet.GetRow(row).GetCell(13).NumericCellValue);
                    float WG = Convert.ToSingle(workSheet.GetRow(row).GetCell(14).NumericCellValue);
                    float DG = Convert.ToSingle(workSheet.GetRow(row).GetCell(15).NumericCellValue);
                    float HA = Convert.ToSingle(workSheet.GetRow(row).GetCell(16).NumericCellValue);
                    float GLAUCO = Convert.ToSingle(workSheet.GetRow(row).GetCell(17).NumericCellValue);
                    float AP = Convert.ToSingle(workSheet.GetRow(row).GetCell(18).NumericCellValue);
                    float AT = Convert.ToSingle(workSheet.GetRow(row).GetCell(19).NumericCellValue);
                    float LE = Convert.ToSingle(workSheet.GetRow(row).GetCell(20).NumericCellValue);
                    float PM = Convert.ToSingle(workSheet.GetRow(row).GetCell(21).NumericCellValue);
                    float VI = Convert.ToSingle(workSheet.GetRow(row).GetCell(22).NumericCellValue);
                    float AH1 = Convert.ToSingle(workSheet.GetRow(row).GetCell(23).NumericCellValue);
                    float LH1 = Convert.ToSingle(workSheet.GetRow(row).GetCell(24).NumericCellValue);
                    float AH2 = Convert.ToSingle(workSheet.GetRow(row).GetCell(25).NumericCellValue);
                    float LH2 = Convert.ToSingle(workSheet.GetRow(row).GetCell(26).NumericCellValue);
                    float AH3 = Convert.ToSingle(workSheet.GetRow(row).GetCell(27).NumericCellValue);
                    float LH3 = Convert.ToSingle(workSheet.GetRow(row).GetCell(28).NumericCellValue);
                    float MJE = Convert.ToSingle(workSheet.GetRow(row).GetCell(29).NumericCellValue);
                    float COBERTURA = Convert.ToSingle(workSheet.GetRow(row).GetCell(30).NumericCellValue);

                    
                    int idVariedad = consultas.ObtenerIdVariedad(codigoVariedad);
                    if (idVariedad > -1)
                    {

                        bool esUpdate = consultas.EsUpdate(idVariedad, ensayo, repeticion);

                        if (!esUpdate)
                        {
                            consultas.AddMedicion(idVariedad, repeticion, ensayo,fechaSiembra,fechaEmergencia,fechaEspigadura,fechaFloracion,fechaMadurez,FS,DS,Bolsa,FB, TG, WG, DG, HA, GLAUCO, AP, AT, LE, PM, VI, AH1, LH1, AH2, LH2, AH3, LH3, MJE, COBERTURA);
                            inserciones++;
                        }
                        else
                        {
                            consultas.UpdateMedicion(idVariedad, repeticion, ensayo, fechaSiembra, fechaEmergencia, fechaEspigadura, fechaFloracion, fechaMadurez, FS, DS, Bolsa, FB, TG, WG, DG, HA, GLAUCO, AP, AT, LE, PM, VI, AH1, LH1, AH2, LH2, AH3, LH3, MJE, COBERTURA);
                            actualizaciones++;
                        }
                    }
                    else
                    {
                        mensajeAdicional = "Sin embargo, el archivo contenía variedades no registradas. Estas no fueron ingresadas";
                    }


                }
                else
                {
                    break;
                }


            }
            return "Se han ingresado " + inserciones.ToString() + " nuevos registros. \nSe han ingresado " + actualizaciones.ToString() + " actualizaciones."+mensajeAdicional;
        }
    }
}
